/**
 * 微信公众号 jssdk
 * 
 */
class WxJssdk {

	constructor(data={}) {
	    this.version = data.version // jssdk 版本号
	}

	/**
	 * 微信jssdk初始化
	 * @param {Object} params
	 * @param {String} params.appId 必填，公众号的唯一标识
	 * @param {Number} params.timestamp 必填，生成签名的时间戳
	 * @param {String} params.nonceStr 必填，生成签名的随机串
	 * @param {String} params.signature 必填，签名
	 * @param {Array} params.jsApiList 必填，需要使用的JS接口列表
	 * @return {Object} wxJS操作对象
	 */
	init(params) {
		return new Promise((resolve,reject) => {
			try {
				wxJS.config({
					debug: false, // 开启调试模式,调用的所有api的返回值会在客户端alert出来，若要查看传入的参数，可以在pc端打开，参数信息会通过log打出，仅在pc端时才会打印。
					appId: params.appId,
					timestamp: params.timestamp,
					nonceStr: params.nonceStr,
					signature: params.signature,
					jsApiList: params.jsApiList // 必填，需要使用的JS接口列表
				});
				let verify = false
				wxJS.error((res) => {
					verify = true
					reject(res)
				});
				// 如果权限验证通过，只会调用wxJS.ready函数，如果权限验证失败，先调用wxJS.error函数，然后再调用wxJS.ready。
				wxJS.ready(() => {
					if(verify) return
					resolve(wxJS)
				});
			} catch(e) {
				reject(e)
			}
		})
	}

	/**
	 * 分享
	 * @param {Object} params
	 * @param {String} params.title 标题
	 * @param {String} params.desc 描述
	 * @param {String} params.link 链接
	 * @param {String} params.imgUrl 图标
	 */
	share(params,fn) {
		// 微信好友
		// wxJS.updateAppMessageShareData({
		// 	title: params.title,
		// 	desc: params.desc,
		// 	link: params.link,
		// 	imgUrl: params.imgUrl,
		// })
		// 微信朋友圈
		// wxJS.updateTimelineShareData({
		// 	title: params.title,
		// 	link: params.link,
		// 	imgUrl: params.imgUrl,
		// })
		// 2021-12-29 error: wxJS.onMenuShareAppMessage is not a function
		// 监听用户点击分享
		wxJS.onMenuShareAppMessage({
			title: params.title,
			desc: params.desc,
			link: params.link,
			imgUrl: params.imgUrl,
			type: '', // 分享类型,music、video或link，不填默认为link
			dataUrl: '', // 如果type是music或video，则要提供数据链接，默认为空
			success: () => {
				fn(1)
			}
		});
		// 监听用户点击分享朋友圈
		wxJS.onMenuShareTimeline({
			title: params.title,
			link: params.link,
			imgUrl: params.imgUrl,
			success: () => {
				fn(2)
			}
		})
	}
	/**
	 * 微信支付
	 * @param {Object} params
	 * @param {Number} params.timestamp 支付签名时间戳，注意微信jssdk中的所有使用timestamp字段均为小写。但最新版的支付后台生成签名使用的timeStamp字段名需大写其中的S字符
	 * @param {String} params.nonceStr 支付签名随机串，不长于 32 位
	 * @param {Object} params.package 统一支付接口返回的prepay_id参数值，提交格式如：prepay_id=\*\*\*）
	 * @param {Object} params.signType 微信支付V3的传入RSA,微信支付V2的传入格式与V2统一下单的签名格式保持一致
	 * @param {Object} params.paySign 支付签名
	 */
	pay(params) {
		return new Promise((resolve,reject) => {
			wxJS.chooseWXPay({
				timestamp: params.timestamp,
				nonceStr: params.nonceStr,
				package: params.package,
				signType: params.signType,
				paySign: params.paySign,
				success: (res) => {
					if(res.errMsg === 'chooseWXPay:ok') {
						console.warn('微信支付 成功');
						resolve()
					} else {
						console.warn('微信支付 取消');
						reject()
					}
				},
				fail: (e) => {
					reject(e)
				}
			});
		})
	}

	/**
	 * 隐藏菜单
	 * @param {Object} menu_list 隐藏菜单列表
	 */
	hideMenus(menu_list) {
		wxJS.hideMenuItems({
			menuList: menu_list // 要隐藏的菜单项，只能隐藏“传播类”和“保护类”按钮，所有menu项见附录3
		});
	}
}

export default WxJssdk
